home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / bipl.zip / PROGS.ZIP / YESCR.ICN < prev    next >
Text File  |  1992-11-26  |  4KB  |  138 lines

  1. ############################################################################
  2. #
  3. #    File:     yescr.icn
  4. #
  5. #    Subject:  Program to convert UNIX files to DOS format
  6. #
  7. #    Author:   Richard L. Goerwitz
  8. #
  9. #    Date:     December 30, 1991
  10. #
  11. ###########################################################################
  12. #
  13. #    Version:  1.2
  14. #
  15. ###########################################################################
  16. #  
  17. #    This program simply inserts MS-DOS carriage-return+linefeed
  18. #  sequences in place of UNIX newlines.  Effects conversion from the
  19. #  native UNIX text file format to its DOS correspondent.
  20. #
  21. #    usage:  yescr file1 [file2 [etc.]]
  22. #
  23. #  Bug:  Doesn't check to see whether the input files are in fact
  24. #  text files.
  25. #
  26. ############################################################################
  27. #
  28. #  Requires:  UNIX or MS-DOS
  29. #
  30. #  See also: nocr.icn
  31. #
  32. ############################################################################
  33.  
  34.  
  35. procedure main(a)
  36.  
  37.     local fname, infile, outfile, line, temp_name
  38.  
  39.     # Static variables, initial clause not really necessary in main().
  40.     static slash, l, ms, DOSos, nok, ok
  41.     initial {
  42.     nok := string(~&letters)
  43.     ok := repl("X",*nok)
  44.     # Find us a place to put temporary files.
  45.     if find("UNIX",&features) then {
  46.         slash := "/"
  47.         l := 10
  48.         ms := ""
  49.     }
  50.     else if find("MS-DOS", &features) then {
  51.         slash := "\\"
  52.         l := 8
  53.         ms := "u"
  54.         DOSos := 1
  55.     }
  56.     # Don't take this out unless you're sure of what you're doing.
  57.     else stop("yescr:  tested only under UNIX and MS-DOS")
  58.     }
  59.  
  60.     # Check to see if we have any arguments.
  61.     *a = 0 & stop("usage:  yescr file1 [file2...]")
  62.  
  63.     # Start popping filenames off of the argument list.
  64.     while fname := pop(a) do {
  65.  
  66.     # Open input file.
  67.     infile := open(fname,"r"||ms) | (er_out(fname), next)
  68.     # Get temporary file name.
  69.     every temp_name :=
  70.         pathname(fname, slash) ||
  71.         map(left(basename(fname,slash),l,"X"), nok, ok) ||
  72.         "." || right(0 to 999,3,"0")
  73.     do close(open(temp_name)) | break
  74.     # Open temporary file.
  75.     outfile := open(temp_name,"w"||ms) | (er_out(temp_name), next)
  76.  
  77.     if \DOSos then {
  78.         # Read in blocks of 80 chars.
  79.         while line := reads(infile,80) do {
  80.         line ? {
  81.             # Replace ASCII LF with CR+LF, effecting a translation
  82.             # from UNIX to DOS format.
  83.             while writes(outfile, tab(find("\x0A")), "\x0D", move(1))
  84.             writes(outfile, tab(0))
  85.         }
  86.         }
  87.     }
  88.     else {
  89.         # I presume I'm running under UNIX (unless I've been hacked).
  90.         # Convert lines into DOS format by appending a carriage return,
  91.         # and then write()'ing (which automatically adds a newline).
  92.         every line := !infile do {
  93.         if line[-1] == "\x0D"
  94.         then write(outfile, line)
  95.         else write(outfile, line || "\x0D")
  96.         }
  97.     }
  98.  
  99.     # Close opened input and output files.
  100.     close(infile)  | stop("yescr:  cannot close, ",fname,"; aborting")
  101.     close(outfile) | stop("yescr:  cannot close, ",temp_name,"; aborting")
  102.  
  103.     # Remove physical input file.
  104.     remove(fname) | stop("yescr:  cannot remove ",fname,"; aborting")
  105.  
  106.     # Give temp name the same name as the input file, completing the
  107.     # conversion process.
  108.     rename(temp_name,fname) |
  109.         stop("yescr:  Can't find temp file ",temp_name,"; aborting")
  110.     }
  111.  
  112. end
  113.  
  114.  
  115. procedure er_out(s)
  116.     write(&errout,"yescr:  cannot open ",s," for reading")
  117.     return
  118. end
  119.  
  120.  
  121. procedure basename(s,slash)
  122.     s ? {
  123.     while tab(find(slash)+1)
  124.     return tab(0)
  125.     }
  126. end
  127.  
  128.  
  129. procedure pathname(s,slash)
  130.     local s2
  131.  
  132.     s2 := ""
  133.     s ? {
  134.     while s2 ||:= tab(find(slash)+1)
  135.     return s2
  136.     }
  137. end
  138.